
import java.util.BitSet;

/*
 ********************************************************************************** 
  Classe para as instruções do tipo J
 **********************************************************************************
 */
 
public class instrucaoJ implements instrucao {
  public static final int OPCODE_J = 2;       /***********Constantes com os OPCodes de cada instrução, para refeência futura*************/
  public static final int OPCODE_JAL = 3;                           
  private String nome; //Nome da instrução para mostrar na tela                          
  private int endJump; //Endereço do jump na base 10
  private int opCode;  //opCode da instrução na bse 10

  
  //Construtor, identifica a instrução e faz a inicialização de acordo
  public instrucaoJ(BitSet b) {
    BitSet opCode = b.get(26, 32);
    int opCodeInt = Integer.parseInt(funcoes.bitSetStr(opCode, 6, true),2);
    if (opCodeInt == OPCODE_J){
      this.nome = "j";
    }else{
      this.nome = "jal";
    }
    this.opCode = opCodeInt;
    BitSet end = b.get(0,25); 
    this.endJump = Integer.parseInt(funcoes.bitSetStr(end, 25, true),2);
    
    System.out.println(this.nome + '\n' + this.endJump);
  }

  @Override
  public int getOpCode() {
    return this.opCode;
  }

  public int getEndJump() {
    return endJump;
  }
  
  public String getNome(){
    return this.nome;
  }
  
  public String toString(){
    return nome + " " + endJump;
  }
  
  
  
}
